home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 010 / gammon.arc / GAMMON.BAS (.txt)
Encoding:
GW-BASIC  |  1985-10-03  |  11.6 KB  |  206 lines

  1. 100  ' **************
  2. 110  ' * BACKGAMMON *
  3. 120  ' **************
  4. 130  ' COPYRIGHT 1984,1985
  5. 140  ' EMERALD VALLEY PUBLISHING CO.
  6. 150  ' BY DENNIS WEBBER
  7. 160  ' AND THE HCM STAFF
  8. 170  ' HOME COMPUTER MAGAZINE
  9. 180  ' VERSION 5.1.1
  10. 190  ' IBM PCjr WITH CARTRIDGE BASIC      FROM DOS 2.1
  11. 200  ' IBM PC WITH BASICA &
  12. 210  ' COLOR/GRAPHICS ADAPTER &
  13. 220  ' COLOR MONITOR
  14. 230  '
  15. 240  CLS:KEY OFF:SCREEN 1:COLOR 1,0:GOTO 250:LOCATE 12,15:PRINT "BACKGAMMON":FOR Z=2 TO 8 STEP 2:CIRCLE (159,90),100+Z*7,1,,,1/Z:NEXT:LOCATE 25,11:PRINT "PRESS ";CHR$(17);CHR$(217);" TO START";:GOSUB 2130
  16. 250  DIM P(25)
  17. 260  CLS:INPUT "ENTER YOUR INITIALS:",N$:N$=LEFT$(N$,3)
  18. 270  CLS:LOCATE 2,4:PRINT "1 1 1 1 1 1     1 2 2 2 2 2":PRINT "   3 4 5 6 7 8     9 0 1 2 3 4":LOCATE 18,4:PRINT "1 1 1":PRINT "   2 1 0 9 8 7     6 5 4 3 2 1"
  19. 280  FOR Z=0 TO 6:LINE (8+Z,Z)-(255-Z,158-Z),1,B:NEXT:LINE (14,27)-(249,30),1,BF:LINE (14,128)-(249,131),1,BF:LINE (117,6)-(120,153),1,BF:LINE (143,6)-(146,152),1,BF
  20. 290  FOR Z=27 TO 115 STEP 16:LINE (Z,30)-(Z+1,77),1,B:LINE (Z,81)-(Z+1,128),1,B:NEXT:FOR Z=155 TO 241 STEP 16:LINE (Z,30)-(Z+1,77),1,B:LINE (Z,81)-(Z+1,128),1,B:NEXT
  21. 300  E=1:FOR X=1 TO 24:READ NP:IF SGN(NP)=1 THEN PL=1 ELSE PL=2
  22. 310  FOR Z=1 TO ABS(NP):GOSUB 1940:NEXT:NEXT
  23. 320  LOCATE 21,1:PRINT "MY ROLL";:DPX=10:GOSUB 1770:GOSUB 1790:PRINT "  YOUR ROLL";:DPX=96:GOSUB 1780:GOSUB 1790 
  24. 330  LINE (10,179)-(116,199),0,BF:LOCATE 21,1:IF D1<D2 THEN PRINT "YOU GO FIRST      ";:GOSUB 1790:GOTO 360
  25. 340  IF D2<D1 THEN PRINT "I GO FIRST         ";:GOSUB 1790:GOTO 360
  26. 350  PRINT "IT'S A TIE -- WE WILL ROLL AGAIN";:GOSUB 1790:LOCATE 21,1:PRINT SPACE$(34);:GOTO 320
  27. 360  IF D1>D2 THEN PL=2 ELSE PL=1
  28. 370  CML=167:UML=167:GOSUB 1800
  29. 380  IF PL=2 THEN 680
  30. 390  PL=1:LINE (5,179)-(50,199),0,BF:LOCATE 21,1:PRINT SPACE$(38);:LOCATE 21,1:PRINT "YOUR TURN";:GOSUB 1830:GOSUB 1800:LOCATE 21,1:PRINT SPACE$(38);:LOCATE 21,1:PRINT "PRESS "CHR$(17);CHR$(217);" TO ROLL YOUR DICE";:GOSUB 2130
  31. 400  DPX=5:GOSUB 1770:GOSUB 1790:DPX=30:GOSUB 1780:IF D1<D2 THEN SWAP D1,D2:SWP=1 ELSE SWP=0
  32. 410  IF D1=D2 THEN TURNS=4 ELSE TURNS=2
  33. 420  GOSUB 1830:GOSUB 1800:IF TURNS=1 THEN IF (D2=0 AND SWP=0) OR (D1=0 AND SWP=1) THEN LINE (30,179)-(50,199),0,BF ELSE LINE (5,179)-(25,199),0,BF
  34. 430  LOCATE 21,1:PRINT SPACE$(28);:LOCATE 21,1:IF P(25)=0 THEN 440 ELSE IF (P(25-D1)>-2 AND D1<>0) OR (P(25-D2)>-2 AND D2<>0) THEN PRINT "FROM BAR TO --";:F=25:GOTO 570 ELSE GOSUB 1820:GOTO 680
  35. 440  IF D1=0 THEN 470
  36. 450  FOR Z=25 TO D1+1 STEP -1:IF P(Z)>0 AND P(Z-D1)>-2 THEN 530
  37. 460  NEXT
  38. 470  IF D2=0 THEN 500
  39. 480  FOR Z=25 TO D2+1 STEP -1:IF P(Z)>0 AND P(Z-D2)>-2 THEN 530
  40. 490  NEXT
  41. 500  IF A5<7 THEN IF A5-D1<1 THEN 530 ELSE IF A5-D2<1 THEN 530
  42. 510  IF (A5<7 AND P(D1)>0) OR (A5<7 AND P(D2)>0) THEN 530
  43. 520  GOSUB 1920:GOTO 680
  44. 530  LOCATE 21,1:PRINT SPACE$(28);:LOCATE 21,1:PRINT "FROM--":LOCATE 21,7,1
  45. 540  GOSUB 2130:IF K$<"1" OR K$>"9" THEN 540 ELSE F=VAL(K$):PRINT K$;:IF K$>"2" THEN 560
  46. 550  GOSUB 2130:IF (K$<"0" OR K$>"9") AND K$<>CHR$(13) THEN 550 ELSE IF K$<>CHR$(13) THEN IF F*10+VAL(K$)>24 THEN 550 ELSE PRINT K$;:F=F*10+VAL(K$)
  47. 560  IF P(F)<1 THEN GOSUB 1930:GOTO 530 ELSE PRINT "   TO--";:
  48. 570  GOSUB 2130:IF K$<"0" OR K$>"9" THEN 570 ELSE T=VAL(K$):PRINT K$;:IF (T>2 OR F<9) THEN 590 ELSE IF T=0 THEN 640
  49. 580  GOSUB 2130:IF (K$<"0" OR K$>"9") AND K$<>CHR$(13) THEN 580 ELSE IF K$<>CHR$(13) THEN IF T*10+VAL(K$)>24 THEN 580 ELSE PRINT K$;:T=T*10+VAL(K$)
  50. 590  IF T=0 THEN 640 ELSE IF P(T)<-1 THEN GOSUB 1930:GOTO 430
  51. 600  D=F-T:IF D<>D1 AND D<>D2 THEN GOSUB 1930:GOTO 430
  52. 610  X=F:E=0:GOSUB 1940:IF P(T)=-1 THEN PL=2:X=T:GOSUB 1940:E=1:X=0:GOSUB 1940:PL=1
  53. 620  X=T:E=1:GOSUB 1940:TURNS=TURNS-1:IF TURNS=1 THEN IF D=D1 THEN D1=0 ELSE D2=0 ELSE IF TURNS=0 THEN 680
  54. 630  GOTO 420
  55. 640  D=F-T:IF A5>6 THEN GOSUB 1930:GOTO 430 ELSE IF (F<>D1 AND (F<>A5 OR D1<A5)) AND (F<>D2 AND (F<>A5 OR D2<A5)) THEN GOSUB 1930:GOTO 430
  56. 650  X=F:E=0:GOSUB 1940:UOB=UOB+1:FOR Z=1 TO UOB:CIRCLE (270,Z*10),4,2:NEXT:TURNS=TURNS-1:GOSUB 1830:IF UML=0 THEN 1620 ELSE IF TURNS=0 THEN 680
  57. 660  IF TURNS=1 THEN IF D<=D1 AND D>D2 THEN D1=0 ELSE IF D<=D2 AND D>D1 THEN D2=0 ELSE D2=0
  58. 670  GOTO 420
  59. 680  LINE(5,179)-(50,199),0,BF:GOSUB 1830:GOSUB 1800:PL=2:LOCATE 21,1:PRINT SPACE$(38);:LOCATE 21,1:PRINT "MY ROLL":DPX=5:GOSUB 1770:GOSUB 1790:DPX=30:GOSUB 1780:IF D1=D2 THEN TURNS=4 ELSE TURNS=2
  60. 690  IF D1<D2 THEN SWAP D1,D2:SWP=1 ELSE SWP=0
  61. 700  GOSUB 1830:GOSUB 1800:IF TURNS=0 THEN 390 ELSE IF P(0)=0 AND A9=0 AND A7>18 THEN 1390 ELSE IF P(0)=0 THEN 780
  62. 710  IF P(D1)>1 AND P(D2)>1 THEN GOSUB 1820:GOTO 390
  63. 720  IF P(D1)=1 THEN A2=D1:GOTO 750 ELSE IF P(D2)=1 THEN A2=D2:GOTO 750
  64. 730  IF P(D1)<=-1 THEN A2=D1:GOTO 750 ELSE IF P(D2)<=-1 THEN A2=D2:GOTO 750
  65. 740  IF P(D1)=0 THEN A2=D1 ELSE IF P(D2)=0 THEN A2=D2
  66. 750  LOCATE 21,1:PRINT SPACE$(28);:LOCATE 21,1:PRINT "FROM BAR TO--";A2:E=0:X=0:PL=2:GOSUB 1940:IF A2=D1 THEN D1=D2 ELSE D2=D1
  67. 760  IF P(A2)=1 THEN PL=1:E=0:X=A2:GOSUB 1940:PL=2:E=1:GOSUB 1940:X=25:PL=1:GOSUB 1940:PL=2:GOTO 1590
  68. 770  PL=2:E=1:X=A2:GOSUB 1940:GOTO 1590
  69. 780  IF A7>A5 THEN 1470 ELSE IF TURNS=1 OR TURNS=3 THEN 960
  70. 790  FOR Z=24 TO 18 STEP -1:IF P(Z)<>1 THEN 840
  71. 800  IF (P(Z-D1)<-2 OR P(Z-D1)=-1) AND (P(Z-D2)<-2 OR P(Z-D2)=-1) THEN 1530
  72. 810  IF Z-D1=Z-D2 AND P(Z-D1)<-1 THEN 1530
  73. 820  IF Z+D1+D2<=24 THEN IF Z-D1<19 AND P(Z-D1)<0 AND P(Z+D1+D2)<0 THEN 1530
  74. 830  IF Z+D1+D2<=24 THEN IF (P(Z-D1)<-2 OR P(Z+D1)=-1) AND P(Z+D1+D2)<0 THEN 1530
  75. 840  NEXT:FOR Z=24 TO 19 STEP -1:IF P(Z)<>-1 OR Z>A5 THEN 920
  76. 850  IF (P(Z-D1)<-2 OR P(Z-D1)=-1) THEN 1530 ELSE IF (P(Z-D2)=-1 OR P(Z-D2)<-2) THEN 1540
  77. 860  IF (P(Z-D1-D2)=-1 OR P(Z-D1-D2)<-2) AND P(Z-D1)=1 THEN A4=Z-D1-D2:A2=Z-D2:GOTO 1550
  78. 870  IF (P(Z-D1-D2)=-1 OR P(Z-D1-D2)<-2) AND P(Z-D2)=1 THEN A4=Z-D1-D2:A2=Z-D1:GOTO 1550
  79. 880  IF (P(Z-D1-D2)=-1 OR P(Z-D1-D2)<-2) AND P(Z-D2)<2 THEN A4=Z-D1-D2:A2=Z-D1:GOTO 1550
  80. 890  IF (P(Z-D1-D2)=-1 OR P(Z-D1-D2)<-2) AND P(Z-D1)<2 THEN A4=Z-D1-D2:A2=Z-D2:GOTO 1550
  81. 900  IF P(Z-D1-D2)<0 AND P(Z-D1)<2 AND Z-D1-D2<19 THEN A4=Z-D1-D2:A2=Z-D2:GOTO 1550
  82. 910  IF P(Z-D1-D2)<0 AND P(Z-D2)<2 AND Z-D1-D2<19 THEN A4=Z-D1-D2:A2=Z-D1:GOTO 1550
  83. 920  NEXT:FOR Z=24 TO 18 STEP -1:IF A5<18 THEN 960 ELSE IF P(Z)>1 OR Z>A5 THEN 950
  84. 930  IF (P(Z-D1)=-2 AND Z-D1<13) OR ((P(Z-D1)=-1 OR P(Z-D1)<-2) AND (P(Z-D2)=-1 OR P(Z-D2)<-2)) THEN 1530
  85. 940  IF (P(Z-D1)=-1 OR Z-D1<-2 OR (P(Z-D1)<19 AND P(Z-D1)<0)) AND (P(Z-D2)=-1 OR P(Z-D2)<-2 OR (Z-D2<19 AND P(Z-D2)<0)) THEN 1530
  86. 950  NEXT
  87. 960  FOR Z=24 TO 7 STEP -1:IF P(Z)<>1 OR Z<>A5 THEN 980 ELSE IF (P(Z-D1)=-1 OR P(Z-D1)<-2) AND A1>3 THEN 1530
  88. 970  IF Z<19 AND (P(Z-D1)=-1 OR P(Z-D1)<-2) THEN 1530
  89. 980  NEXT:FOR Z=24 TO 18 STEP -1:IF A5<18 THEN 1050 ELSE IF P(Z)<>-1 OR Z>A5 THEN 1040
  90. 990  IF (P(Z-D1)=-1 OR P(Z-D1)<-2) OR (P(Z-D1)<0 AND Z-D1<19) THEN 1530
  91. 1000  IF Z+D1<=24 THEN IF P(Z+D1)<=1 OR (Z+D1>A5 AND P(Z+D1)<2) THEN 1490
  92. 1010  IF Z+D2<=24 THEN IF P(Z+D2)<=1 OR Z+D2>A5 THEN 1500
  93. 1020  IF Z+D1<=24 THEN IF P(Z+D1)<2 AND Z+D1>A5 THEN 1490
  94. 1030  IF Z+D2<=24 THEN IF P(Z+D2)<2 AND Z+D2>A5 THEN 1500
  95. 1040  NEXT
  96. 1050  FOR Z=24 TO 19 STEP -1:IF A5<19 THEN 1090 ELSE IF P(Z)<>-1 OR Z>A5 THEN 1080
  97. 1060  IF Z+D1<=24 THEN IF (Z+D1>A5 AND P(Z+D1)>2) THEN 1490
  98. 1070  IF Z+D2<=24 THEN IF (Z+D2>A5 AND P(Z+D2)>2) THEN 1500
  99. 1080  NEXT
  100. 1090  IF NOT((A1>2 AND P(25)>0) OR A1>3) THEN 1130
  101. 1100  FOR Z=24 TO 19 STEP -1:IF P(Z)<>1 THEN 1120
  102. 1110  IF Z-D1<19 AND P(Z-D1)<0 THEN 1530 ELSE IF Z-D2<19 AND P(Z-D2)<0 THEN 1540
  103. 1120  NEXT
  104. 1130  FOR Z=1 TO 12:IF P(Z)<=-1 THEN IF P(Z+D1)=1 THEN 1490 ELSE IF P(Z+D2)=1 THEN 1500
  105. 1140  NEXT:FOR Z=18 TO 7 STEP -1:IF P(Z)<>-1 OR Z>A5 THEN 1160 ELSE IF P(Z-D1)<-2 OR P(Z-D1)=-1 THEN 1530
  106. 1150  IF P(Z-D2)<-2 OR P(Z-D2)=-1 THEN 1540
  107. 1160  NEXT:FOR Z=1 TO 24-D1:IF P(Z)=-1 THEN IF P(Z+D1)<=-1 OR (Z+D1>A5 AND Z+D1<25) THEN 1490
  108. 1170  NEXT:IF P(1)=-2 AND P(1+D1)<2 AND P(1+D1+D2)<0 THEN Z=1:GOTO 1490
  109. 1180  FOR Z=A7 TO 18:IF (P(Z)=-1 OR P(Z)<-2) AND P(Z+D1)<2 THEN 1490
  110. 1190  NEXT:FOR Z=A7 TO 24-D1:IF SGN(P(Z))=-1 AND P(Z+D1)<2 THEN 1490
  111. 1200  NEXT:FOR Z=A7 TO 24-D2:IF P(Z)<=-1 AND P(Z+D2)<2 THEN 1500
  112. 1210  NEXT:GOSUB 1810:GOTO 390
  113. 1220  IF A7>A5 THEN 1390 ELSE IF P(25-D1)<-2 OR P(25-D1)=-1 THEN 1510 ELSE IF P(25-D2)<-2 OR P(25-D2)=-1 THEN 1520
  114. 1230  FOR Z=A7 TO 24:IF P(Z)>-1 THEN 1360 ELSE IF TURNS=1 OR TURNS=3 THEN 1350 ELSE Y=ABS(P(X)):IF Y>3 THEN Y=4
  115. 1240  ON Y GOTO 1320,1250,1290,1320
  116. 1250  IF A7+D1>24 AND A7+D2>24 THEN 1490 ELSE IF A7+D1>24 AND A7+D2>A5 THEN 1490
  117. 1260  IF Z+D2<=24 THEN IF Z+D1>24 AND Z=A7 AND P(Z+D2)<2 THEN 1490
  118. 1270  IF Z+D2>24 AND Z+D1>24 AND D2=A7 THEN 1500
  119. 1280  IF Z+D2>24 AND (Z+D1>A5 AND Z+D1<25) THEN IF P(Z+D1)<-1 THEN 1500
  120. 1290  IF 25-D1=Z THEN 1510
  121. 1300  IF Z+D1>A5 THEN IF Z+D1<25 THEN IF P(Z+D1)<1 THEN 1490 ELSE 1320 ELSE 1320
  122. 1310  IF Z+D1<25 THEN IF SGN(P(Z+D1))=-1 THEN 1490
  123. 1320  IF Z+D2>24 AND Z=A7 THEN 1490
  124. 1330  IF Z+D2>A5 THEN IF Z+D2<26 THEN IF P(Z+D2)<2 THEN 1490
  125. 1340  IF Z+D2<26 THEN IF SGN(P(Z+D2))=-1 OR P(Z+D2)<-2 THEN 1500
  126. 1350  IF P(Z)=-1 THEN IF Z+D1<25 THEN IF P(Z+D1)<0 THEN 1490 ELSE IF P(Z+D2)<0 AND Z+D2<25 AND P(Z)=-1 THEN 1500
  127. 1360  NEXT:FOR Z=24 TO A7 STEP -1:IF Z+D1>24 OR P(Z)>=0 THEN 1380
  128. 1370  IF (P(Z)=-1 OR P(Z)<-2) AND (P(Z+D1) OR Z+D1>A5) AND (P(Z+D1)<2) THEN 1490
  129. 1380  NEXT
  130. 1390  IF SGN(P(25-D1))=-1 THEN 1510 ELSE IF SGN(P(25-D2))=-1 THEN 1520
  131. 1400  IF A7+D1>24 THEN 1470 ELSE IF A7+D2>24 THEN 1480
  132. 1410  FOR Z=A7 TO 24:IF P(Z)>-1 OR (Z+D1>24 AND Z+D2>24) THEN 1430
  133. 1420  IF Z+D1<25 THEN IF P(Z+D1)=0 THEN 1490 ELSE ELSE IF Z+D2<24 THEN IF P(Z+D2)=0 THEN 1500
  134. 1430  NEXT:FOR Z=A7 TO 24:IF P(Z)>-1 THEN 1450 ELSE IF Z+D1>24 THEN 1450 ELSE IF P(Z+D1)<2 THEN 1490
  135. 1440  IF Z+D2<=24 THEN IF P(Z+D2)<2 THEN 1500
  136. 1450  NEXT:IF A7+D1<25 THEN IF P(A7+D1)<2 THEN 1470
  137. 1460  IF A7+D2<25 THEN IF P(A7+D2)<2 THEN 1470 ELSE GOSUB 1810:GOTO 390
  138. 1470  A4=A7:A2=A7+D1:GOTO 1550
  139. 1480  A4=A7:A2=A7+D2:GOTO 1550
  140. 1490  A4=Z:A2=Z+D1:GOTO 1550
  141. 1500  A4=Z:A2=Z+D2:GOTO 1550
  142. 1510  A4=25-D1:A2=25:GOTO 1550
  143. 1520  A4=25-D2:A2=25:GOTO 1550
  144. 1530  A4=Z-D1:A2=Z:GOTO 1550
  145. 1540  A4=Z-D2:A2=Z
  146. 1550  IF (A2-A4=D1 AND SWP=0) OR (A2-A4=D2 AND SWP=1) THEN LINE (5,179)-(25,199),0,BF ELSE LINE (30,179)-(50,199),0,BF
  147. 1560  IF A2-A4=D1 THEN D1=D2 ELSE D2=D1
  148. 1570  LOCATE 21,1:IF A2>24 THEN A12=A12+1:A2=0:X=A4:E=0:PL=2:GOSUB 1940:GOSUB 1610:FOR Z=1 TO A12:CIRCLE (280,Z*10),4,3:NEXT:GOTO 1590 ELSE IF P(A2)=1 THEN E=0:X=A2:PL=1:GOSUB 1940:X=25:E=1:GOSUB 1940:PL=2
  149. 1580  GOSUB 1610:E=0:X=A4:GOSUB 1940:IF A2<25 THEN E=1:X=A2:GOSUB 1940
  150. 1590  GOSUB 1830:IF CML=0 THEN C$="I WIN AGAIN -- BETTER LUCK NEXT TIME":GOTO 1620
  151. 1600  TURNS=TURNS-1:IF TURNS<1 THEN 390 ELSE 700
  152. 1610  LOCATE 21,1:PRINT SPACE$(38);:LOCATE 21,1:SOUND 440,3:PRINT "FROM--";A4;"  TO--";A2;:GOSUB 1790:RETURN
  153. 1620  GOSUB 1800
  154. 1630  FOR Z=1 TO 4:FOR ZZ=440 TO 1600 STEP 40:SOUND ZZ,1:NEXT:FOR ZZ=1600 TO 440 STEP -40:SOUND ZZ,1:NEXT:NEXT:GOSUB 1830:LINE(0,158)-(319,199),0,BF:IF (CML=0 AND A5>18) OR (UML=0 AND A7<7) THEN LOCATE 21,10:PRINT "B A C K G A M M O N":GOTO 1650
  155. 1640  LOCATE 21,14:PRINT "G A M M O N"
  156. 1650  LOCATE 23,1:IF CML=0 THEN PRINT "I WIN AGAIN -- GOSH I'M GOOD"; ELSE PRINT "YOU'RE THE WINNER -- CONGRATULATIONS";
  157. 1660  LOCATE 24,1:PRINT "WOULD YOU LIKE TO TRY ME AGAIN (Y/N)?";
  158. 1670  GOSUB 2130:IF K$<>"Y" AND K$<>"y" AND K$<>"N" AND K$<>"n" THEN 1670 ELSE IF K$="N" OR K$="n" THEN CLS:END
  159. 1680  CLEAR:GOTO 250
  160. 1690  SOUND 880,1:ON D GOTO 1700,1710,1720,1730,1740,1750
  161. 1700  LINE (DPX,DPY)-(DPX+20,DPY+20),3,BF:LINE (DPX+9,DPY+9)-(DPX+10,DPY+10),0,B:RETURN
  162. 1710  LINE (DPX,DPY)-(DPX+20,DPY+20),3,BF:LINE (DPX+5,DPY+5)-(DPX+6,DPY+6),0,B:LINE (DPX+13,DPY+13)-(DPX+14,DPY+14),0,B:RETURN
  163. 1720  LINE (DPX,DPY)-(DPX+20,DPY+20),3,BF:LINE (DPX+5,DPY+5)-(DPX+6,DPY+6),0,B:LINE (DPX+9,DPY+9)-(DPX+10,DPY+10),0,B:LINE (DPX+13,DPY+13)-(DPX+14,DPY+14),0,B:RETURN
  164. 1730  LINE (DPX,DPY)-(DPX+20,DPY+20),3,BF:LINE (DPX+5,DPY+5)-(DPX+6,DPY+6),0,B:LINE (DPX+13,DPY+5)-(DPX+14,DPY+6),0,B:LINE (DPX+13,DPY+13)-(DPX+14,DPY+14),0,B:LINE (DPX+5,DPY+13)-(DPX+6,DPY+14),0,B:RETURN
  165. 1740  LINE (DPX,DPY)-(DPX+20,DPY+20),3,BF:LINE (DPX+5,DPY+5)-(DPX+6,DPY+6),0,B:LINE (DPX+13,DPY+5)-(DPX+14,DPY+6),0,B:LINE (DPX+13,DPY+13)-(DPX+14,DPY+14),0,B:LINE (DPX+5,DPY+13)-(DPX+6,DPY+14),0,B:LINE (DPX+9,DPY+9)-(DPX+10,DPY+10),0,B:RETURN
  166. 1750  LINE (DPX,DPY)-(DPX+20,DPY+20),3,BF:LINE (DPX+5,DPY+5)-(DPX+6,DPY+6),0,B:LINE (DPX+13,DPY+5)-(DPX+14,DPY+6),0,B:LINE (DPX+13,DPY+13)-(DPX+14,DPY+14),0,B:LINE (DPX+5,DPY+13)-(DPX+6,DPY+14),0,B:LINE (DPX+5,DPY+9)-(DPX+6,DPY+10),0,B
  167. 1760  LINE (DPX+13,DPY+9)-(DPX+14,DPY+10),0,B:RETURN
  168. 1770  RANDOMIZE TIMER:D1=INT(RND*6+1):IF D1<1 OR D1>6 THEN 1770 ELSE D=D1:DPY=179:GOSUB 1690:RETURN
  169. 1780  D2=INT(RND*6+1):IF D2<1 OR D2>6 THEN 1780 ELSE D=D2:DPY=179:GOSUB 1690:RETURN
  170. 1790  FOR TD=1 TO 1000:NEXT:RETURN
  171. 1800  LOCATE 22,30:PRINT N$;TAB(35);UML:LOCATE 23,30:PRINT "ME";TAB(35);CML:CIRCLE (262,172),4,2:CIRCLE (262,180),4,3:RETURN
  172. 1810  LOCATE 21,1:PRINT SPACE$(38);:FOR Z=1 TO 2:LOCATE 21,1:PRINT "CAN'T MOVE":SOUND 110,6:GOSUB 1790:LOCATE 21,1:PRINT SPACE$(38);:FOR TD=1 TO 200:NEXT:NEXT:RETURN
  173. 1820  LOCATE 21,1:SOUND 110,6:PRINT "INNER TABLE BLOCKED--CAN'T MOVE";:GOSUB 1790:GOSUB 1790:RETURN
  174. 1830  UML=0:CML=0:FOR Z=1 TO 24:IF P(Z)>0 THEN UML=UML+(P(Z)*Z) ELSE IF P(Z)<0 THEN CML=CML-(P(Z)*(25-Z))
  175. 1840  NEXT:CML=CML-(P(0)*25):UML=UML+(P(25)*25):FOR Z=25 TO 1 STEP -1:IF SGN(P(Z))=1 THEN A5=Z:GOTO 1860
  176. 1850  NEXT:A5=0
  177. 1860  FOR Z=24 TO 19 STEP -1:IF P(Z)<-1 THEN A1=1: GOTO 1880
  178. 1870  NEXT:A1=0
  179. 1880  FOR Z=1 TO 18:IF SGN(P(Z))=-1 THEN A9=-1:GOTO 1900
  180. 1890  NEXT:A9=0
  181. 1900  FOR Z=1 TO 24:IF SGN(P(Z))=-1 THEN A7=Z:RETURN
  182. 1910  NEXT:A7=0:RETURN
  183. 1920  FOR Z=1 TO 3:LOCATE 21,1:PRINT SPACE$(28);:LOCATE 21,1:PRINT "CAN'T MOVE";CHR$(7);CHR$(7);:FOR TD=1 TO 300:NEXT:LOCATE 21,1:NEXT:GOSUB 1790:RETURN
  184. 1930  FOR Z=1 TO 3:LOCATE 21,1:PRINT SPACE$(28);:LOCATE 21,1:PRINT "INVALID MOVE";CHR$(7);CHR$(7);:FOR TD=1 TO 300:NEXT:LOCATE 21,1:NEXT:GOSUB 1790:RETURN
  185. 1940  IF X<19 THEN 1960 ELSE ZP=156+((X-19)*16):IF E=0 THEN IF ABS(P(X))>6 THEN OF=-48 ELSE OF=0 ELSE IF ABS(P(X))>5 THEN OF=-48 ELSE OF=0 ELSE ZP=132
  186. 1950  PY=34+OF+((ABS(P(X))-1)*8):IF E=1 THEN PY=PY+8:GOTO 2040 ELSE 2040
  187. 1960  IF X<13 OR X>18 THEN 1980 ELSE ZP=28+((X-13)*16):IF E=0 THEN IF ABS(P(X))>6 THEN OF=-48 ELSE OF=0 ELSE IF ABS(P(X))>5 THEN OF=-48 ELSE OF=0
  188. 1970  PY=34+OF+((ABS(P(X))-1)*8):IF E=1 THEN PY=PY+8:GOTO 2090 ELSE 2040
  189. 1980  IF X<7 OR X>12 THEN 2000 ELSE ZP=28+((12-X)*16):IF E=0 THEN IF ABS(P(X))>6 THEN OF=-48 ELSE OF=0 ELSE IF ABS(P(X))>5 THEN OF=-48 ELSE OF=0
  190. 1990  PY=124-OF-((ABS(P(X))-1)*8):IF E=1 THEN PY=PY-8:GOTO 2040 ELSE 2040
  191. 2000  IF X=0 THEN ZP=132 ELSE ZP=156+((6-X)*16)
  192. 2010  IF E=0 THEN IF ABS(P(X))>6 THEN OF=-48 ELSE OF=0 ELSE IF ABS(P(X))>5 THEN OF=-48 ELSE OF=0
  193. 2020  PY=124-OF-((ABS(P(X))-1)*8)
  194. 2030  IF E=1 THEN PY=PY-8:GOTO 2090
  195. 2040  IF E=1 THEN 2090
  196. 2050  IF X=25 OR X=0 THEN ZP=132
  197. 2060  IF ABS(P(X))>6 THEN LINE (ZP-4,PY-3)-(ZP+4,PY+3),0,BF:CIRCLE (ZP,PY),4,PL+1 ELSE LINE (ZP-4,PY-3)-(ZP+4,PY+3),0,BF:IF X<>25 AND X<>0 THEN LINE (ZP-1,PY-4)-(ZP,PY+4),1,B
  198. 2070  IF PL=1 THEN P(X)=P(X)-1 ELSE P(X)=P(X)+1
  199. 2080  RETURN
  200. 2090  IF PL=1 THEN P(X)=P(X)+1 ELSE P(X)=P(X)-1
  201. 2100  IF X=25 OR X=0 THEN ZP=132
  202. 2110  IF ABS(P(X))>6 THEN PAINT (ZP,PY),PL+1,PL+1 ELSE CIRCLE (ZP,PY),4,PL+1
  203. 2120  RETURN
  204. 2130  K$="":WHILE K$="":K$=INKEY$:WEND:RETURN
  205. 2140  DATA -2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2
  206.